<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Vue监测数据改变的原理</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../VueJs/vue.js"></script>
</head>

<body>
    <!-- 准备好一个容器-->
    <div id="root">
        <h1>学校信息</h1>
        <h2>学校名称：{{name}}</h2>
        <h2>学校地址：{{address}}</h2>
        <hr />
        <h1>学生信息</h1>
        <h2>姓名{{student.name}}</h2>
        <h2 v-show='student.sex'>性别{{student.sex}}</h2>
        <button @click="addSex">添加性别，默认为男</button>
        <h2>年龄：真实{{student.age.rAge}}，对外{{student.age.sAge}}</h2>
        <h2>朋友们</h2>
        <ul>
            <li v-for="(f,index) in student.friends" :key="index">
                {{f.name}}--{{f.age}}
            </li>
        </ul>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el: '#root',
        data: {
            name: '尚硅谷',
            address: '北京',
            student: {
                name: 'tom',
                age: {
                    rAge: 40,
                    sAge: 29,
                },
                friends: [
                    { name: 'jerry', age: 35 },
                    { name: 'tony', age: 29 },

                ]
            }
        },
        methods: {
            addSex: function () {
                // this.student.sex = '男';不能做响应式,因为直接添加vue没有给他get与set方法

                // Vue.set(this._data.student, "sex", "男");第一个参数不能为vm或者vm身上的_data(根数据对象)

                //因为vm._data.student===vm.student数据代理,下面写法同样实现

                // Vue.set(this.student, "sex", "男");

                // 也用实例身上的方法，功能一样vm.$set()

                this.$set(this.student, "sex", "男");
                // this.$delete或者Vue.delete移除一个响应式数据
            }
        }
    })
</script>

</html>